Skip to main content

Versi 1

FieldIsi
Dokumen IDVBS-PBL-001
DeskripsiPencatatan invoice pembelian barang dari supplier melalui empat jalur (pembelian biasa, atas PO, atas penerimaan, dan import), beserta daftar, ringkasan hutang, filter, dan pengelolaan status draft / selesai
Nomor Revisi1
Tanggal2026-10-04
KeteranganDokumentasi baseline dari dokumentasi fitur demo dan kode FE

1. Ringkasan​

a. In scope​

  • User melihat ringkasan pembelian: total pembelian belum lunas, total pembelian jatuh tempo, dan total pembelian terbayar 30 hari terakhir.
  • User melihat daftar invoice pembelian (tanggal, nomor invoice, supplier, total, PPN, potongan PPh, status, jatuh tempo, lunas, tipe, lampiran) dan memilih kolom yang ditampilkan.
  • User mencari berdasarkan nomor invoice dan memfilter daftar berdasarkan periode tanggal invoice, periode jatuh tempo, supplier, tipe (barang / import / aset), barang, status invoice (selesai / belum selesai), dan tagihan (lunas / belum lunas).
  • User membuat pembelian biasa untuk barang yang sudah diterima (nota offline / WA / nota fisik).
  • User membuat pembelian atas PO dengan memilih invoice PO sehingga barang terisi otomatis.
  • User membuat pembelian atas penerimaan dengan memilih invoice penerimaan barang dari gudang sehingga barang terisi otomatis.
  • User membuat pembelian import dengan data PO import, PIB (bea masuk, PPN, PPh 22), biaya asuransi, dan invoice terkait (pengiriman, asuransi, biaya lain).
  • User menyimpan pembelian sebagai draft (simpan sementara) atau final (selesai).
  • User mengubah, menghapus, atau memfinalkan invoice yang masih draft.
  • User dengan hak khusus membuka kembali invoice selesai menjadi draft dan memposting ulang jurnal pembelian.
  • User mengaitkan invoice pembelian ke invoice induk / invoice terkait, menambah lampiran, menambah potongan PPh, mencetak invoice, dan menuju pelunasan hutang.

b. Catatan​

c. Kesimpulan​

  • [FE] -
  • [BE] -

2. Functional Requirement​

KodeDeskripsi
FR-01Sistem menampilkan ringkasan pembelian belum lunas, jatuh tempo, dan terbayar 30 hari terakhir bagi user yang berhak melihat summary
FR-02Sistem menampilkan daftar invoice pembelian semua tipe (barang, import, aset) dengan pagination dan kolom yang bisa dipilih
FR-03User dapat mencari dan memfilter daftar pembelian
FR-04User dapat membuat pembelian biasa dengan rincian barang, biaya lain, diskon, PPN, PPh, tempo, dan metode pembayaran
FR-05User dapat membuat pembelian atas PO yang mengambil barang dari invoice PO belum selesai
FR-06User dapat membuat pembelian atas penerimaan yang mengambil barang dari invoice penerimaan barang
FR-07User dapat membuat pembelian import dengan data PIB, PO import, dan invoice terkait
FR-08User dapat menyimpan pembelian sebagai draft atau final
FR-09User dapat mengubah, menghapus, dan memfinalkan invoice pembelian yang masih draft
FR-10User dengan hak unlock dapat mengubah invoice selesai kembali menjadi draft
FR-11User dapat memposting ulang invoice pembelian yang sudah selesai
FR-12User dapat mengaitkan invoice pembelian ke invoice induk / invoice terkait

3. Use Case List​

KodeDeskripsi
UC-01Melihat ringkasan dan daftar pembelian
UC-02Mencari dan memfilter daftar pembelian
UC-03Membuat pembelian biasa
UC-04Membuat pembelian atas PO
UC-05Membuat pembelian atas penerimaan
UC-06Membuat pembelian import
UC-07Mengubah invoice pembelian draft
UC-08Memfinalkan atau menghapus invoice pembelian draft
UC-09Membuka kembali (unlock) invoice pembelian ke draft
UC-10Memposting ulang invoice pembelian
UC-11Mengaitkan invoice pembelian ke invoice induk / terkait

4. Use Case Scenario​

UC-01 : Melihat ringkasan dan daftar pembelian​

AktorUser brand dengan hak pembelian
DeskripsiUser melihat ringkasan hutang pembelian dan daftar invoice pembelian
PrekondisiUser sudah login
Brand aktif
User memiliki hak #pembelian basic
Alur utama1. User membuka menu Transaksi, Pembelian.
2. Sistem menampilkan kartu ringkasan pembelian belum lunas, jatuh tempo, dan terbayar 30 hari terakhir.
3. Sistem menampilkan daftar invoice pembelian terbaru beserta tipe dan status.
4. User menggulir untuk memuat halaman berikutnya.
5. User mengatur kolom tabel atau membuka preview lampiran.
Alur negatif- Jika daftar kosong tanpa filter, muncul "Daftar Invoice masih kosong".
- Jika daftar kosong dengan filter, muncul "Invoice Tidak Ditemukan".
- Jika gagal memuat ringkasan, kartu ringkasan menampilkan nominal 0.
Bisnis rule- Kartu ringkasan hanya tampil bagi user dengan hak #summary-pembelian.
- User tanpa hak #pembelian all hanya melihat invoice yang dibuatnya sendiri.
- User non admin brand hanya melihat invoice pada gudang yang diizinkan.
- Kolom PPN hanya tampil jika brand Pengusaha Kena Pajak.
- Kolom Lunas tampil - untuk invoice draft.
- Daftar diperbarui otomatis saat ada event pembelian baru dari socket.
PostkondisiRingkasan dan daftar pembelian tampil
TriggerUser membuka halaman Pembelian
Kode FRFR-01
FR-02

UC-02 : Mencari dan memfilter daftar pembelian​

AktorUser brand dengan hak pembelian
DeskripsiUser mempersempit daftar pembelian berdasarkan kriteria
PrekondisiUser berada di halaman daftar pembelian
Alur utama1. User mengetik nomor invoice pada kolom pencarian.
2. User membuka Filter.
3. User mengisi periode tanggal invoice, periode jatuh tempo, supplier, tipe, barang, status invoice, dan/atau tagihan.
4. Sistem memuat ulang daftar dari halaman pertama dan menampilkan filter aktif.
Alur negatif- Jika tidak ada data yang cocok, muncul "Invoice Tidak Ditemukan".
- User dapat menekan Reset untuk mengosongkan filter.
Bisnis rule- Tipe: Aset, Import, Barang.
- Status invoice: Selesai, Belum selesai.
- Tagihan: Lunas, Belum lunas.
- Periode tanggal bisa mode harian atau bulanan (akhir bulan dipakai sebagai batas akhir).
PostkondisiDaftar pembelian sesuai filter
TriggerUser mengubah pencarian atau filter
Kode FRFR-03

UC-03 : Membuat pembelian biasa​

AktorUser dengan hak tambah pembelian
DeskripsiUser mencatat invoice pembelian untuk barang yang sudah diterima
PrekondisiSupplier terdaftar di master supplier
Barang terdaftar di master barang
User memiliki hak #pembelian-only atau #pembelian basic
Alur utama1. User klik Buat Invoice, Pembelian.
2. User mengisi tanggal, lokasi / gudang (kandang diperlakukan sebagai gudang), supplier, tempo, cluster, PPN dan mode PPN, nomor faktur pajak, serta keterangan nota.
3. User menambah baris barang (qty, satuan, harga, diskon).
4. User menambah biaya lain-lain dan diskon global (opsional).
5. User mengisi metode pembayaran.
6. User memilih Simpan Draft atau Simpan Final.
7. Untuk final, sistem meminta konfirmasi lalu menyimpan invoice.
8. Sistem mengunggah lampiran (jika ada) dan kembali ke daftar.
Alur negatif- Jika header belum lengkap, muncul "Tolong lengkapi form dengan benar!".
- Jika rincian belum lengkap, muncul "Tolong lengkapi rincian dengan benar!".
- Jika gudang belum dipilih, muncul "Tolong lengkapi gudang form dengan benar!".
- Jika biaya belum lengkap, muncul "Tolong lengkapi Biaya dengan benar!".
- Jika tempo lebih dari 0 tanpa supplier, muncul "Tempo harus 0 untuk pembelian tanpa supplier".
- Jika tempo 0 dan metode pembayaran kosong, muncul "Metode Pembayaran Harus Diisi".
- Jika pembayaran melebihi atau kurang dari total, muncul "Pembayaran tidak boleh melebihi Nilai Total Pembayaran" / "Total Bayar Kurang Dari Total Pembelian".
- Jika harga beli lebih tinggi dari pembelian terakhir dan user tidak punya hak #beli-above-last, muncul "Harga Beli tidak boleh lebih dari harga pembelian terakhir".
- Jika user tidak punya akses gudang, muncul "Anda tidak memiliki akses pada gudang ...".
Bisnis rule- Tempo 0 berarti dibayar kontan sehingga total pembayaran wajib sama dengan total pembelian saat final.
- Metode pembayaran titipan memakai invoice DP dan menjadikan tempo minimal 1.
- PPN hanya berlaku jika brand PKP dan PPN masukan diaktifkan, nomor faktur pajak dikirim bila PPN aktif.
- Simpan final tidak dapat diubah kembali kecuali di-unlock.
- Barang dengan nomor seri dipecah per qty 1.
PostkondisiInvoice pembelian tersimpan sebagai draft atau selesai
TriggerUser klik Simpan Draft / Simpan Final
Kode FRFR-04
FR-08

UC-04 : Membuat pembelian atas PO​

AktorUser dengan hak #pembelian-tanpa-penerimaan
DeskripsiUser mengubah PO yang sudah diproses menjadi invoice pembelian
PrekondisiAda invoice PO berstatus belum selesai untuk supplier dan gudang terkait
Alur utama1. User klik Buat Invoice, Pembelian atas PO (atau membuka dari PO).
2. User memilih gudang dan supplier.
3. Sistem menampilkan invoice PO belum selesai milik supplier dan gudang tersebut.
4. User memilih invoice PO.
5. Sistem mengisi supplier, gudang, lokasi, dan barang dari PO.
6. User melengkapi harga, pembayaran, lalu menyimpan draft / final.
Alur negatif- Jika invoice PO dari tautan tidak ditemukan, muncul "Invoice PO yang anda cari tidak ditemukan!".
- Validasi form, rincian, dan pembayaran sama seperti pembelian biasa.
Bisnis rule- Invoice PO wajib dipilih.
- Barang tidak perlu diinput ulang karena diambil dari PO.
- Hanya PO berstatus belum selesai yang dapat dipilih.
PostkondisiInvoice pembelian tersimpan dan terhubung ke invoice PO
TriggerUser memilih menu Pembelian atas PO
Kode FRFR-05
FR-08

UC-05 : Membuat pembelian atas penerimaan​

AktorUser dengan hak #pembelian-dengan-penerimaan
DeskripsiUser membuat invoice pembelian dari invoice penerimaan barang gudang
PrekondisiGudang sudah membuat invoice penerimaan barang dari supplier terkait
Alur utama1. User klik Buat Invoice, Pembelian atas Penerimaan.
2. User memilih gudang dan supplier.
3. Sistem menampilkan invoice penerimaan untuk gudang dan supplier tersebut.
4. User memilih invoice penerimaan.
5. Sistem mengisi barang dari penerimaan.
6. User melengkapi harga, pembayaran, lalu menyimpan draft / final.
Alur negatif- Jika supplier diganti, pilihan invoice penerimaan dikosongkan.
- Validasi form, rincian, dan pembayaran sama seperti pembelian biasa.
Bisnis rule- Invoice penerimaan wajib dipilih.
- Id invoice pembelian memakai id invoice penerimaan dan ditandai sebagai pembelian dari penerimaan.
- Qty stok dapat diambil dari qty penerimaan.
PostkondisiInvoice pembelian tersimpan dan terhubung ke invoice penerimaan
TriggerUser memilih menu Pembelian atas Penerimaan
Kode FRFR-06
FR-08

UC-06 : Membuat pembelian import​

AktorUser dengan hak tambah pembelian
DeskripsiUser mencatat pembelian dari luar negeri dengan data tambahan import
PrekondisiSupplier, barang / aset, dan akun pembayaran tersedia
Alur utama1. User klik Buat Invoice, Pembelian Import.
2. User mengisi informasi nota (tanggal, supplier, gudang, mata uang dan kurs, nomor PO import, nomor BL).
3. User mengisi rincian barang dan/atau aset.
4. User mengisi PIB (nomor, tanggal, bea masuk, PPN, PPh 22, tanggal bayar, akun pembayaran) dan SPTNP bila ada.
5. User memilih invoice terkait (pengiriman, asuransi, biaya lain).
6. User mengisi metode pembayaran lalu menyimpan draft / final.
7. Sistem menyimpan invoice, mengaitkan invoice terkait, dan mengunggah lampiran.
Alur negatif- Jika rincian barang / aset belum lengkap, muncul "Tolong lengkapi rincian barang dengan benar!" / "Tolong lengkapi rincian aset dengan benar!".
- Jika ada nilai PIB tanpa tanggal PIB, muncul "Tolong lengkapi tanggal pib dengan benar!".
- Jika tanggal bayar PIB diisi tanpa akun, muncul "Tolong lengkapi akun pembayaran pib dengan benar!".
- Jika SPTNP tanpa akun, muncul "Tolong lengkapi akun pembayaran sptnp dengan benar!".
Bisnis rule- Pembelian import tidak boleh konsinyasi.
- Total pembelian import termasuk biaya asuransi, pengiriman, dan biaya lain dari invoice terkait.
- PPN pada daftar untuk import = PIB PPN ditambah PPN SPTNP, potongan PPh = PIB PPh 22.
PostkondisiInvoice pembelian import tersimpan dengan tipe Import
TriggerUser klik Simpan pada form pembelian import
Kode FRFR-07
FR-08
FR-12

UC-07 : Mengubah invoice pembelian draft​

AktorUser dengan hak #pembelian basic
DeskripsiUser memperbaiki invoice pembelian yang masih draft
PrekondisiInvoice berstatus draft
Alur utama1. User memilih Edit pada menu aksi invoice.
2. Sistem memuat data invoice (pembelian biasa atau import).
3. User mengubah data lalu menyimpan draft / final.
Alur negatif- Jika invoice tidak ditemukan, sistem kembali ke daftar pembelian.
- Jika tempo lebih dari 0 tanpa hak, muncul "Anda tidak memiliki akses melakukan pembelian tempo > 0, silahkan ganti tempo menjadi 0".
- Validasi lain sama seperti pembuatan.
Bisnis rule- Menu Edit hanya muncul untuk invoice draft.
- Invoice tipe aset diarahkan ke halaman pembelian aset.
PostkondisiInvoice pembelian diperbarui
TriggerUser klik Edit
Kode FRFR-09

UC-08 : Memfinalkan atau menghapus invoice pembelian draft​

AktorUser dengan hak #pembelian basic
DeskripsiUser menyelesaikan invoice draft langsung dari daftar atau menghapusnya
PrekondisiInvoice berstatus draft
Alur utama1. User membuka menu aksi invoice draft.
2. User memilih Finalize Nota, sistem menandai invoice selesai lalu membuka cetak invoice.
3. Atau user memilih Hapus, mengonfirmasi, dan sistem menghapus invoice dari daftar.
Alur negatif- Jika user membatalkan konfirmasi hapus, invoice tidak dihapus.
- Jika gagal, muncul notifikasi error dari server.
Bisnis rule- Hapus hanya untuk invoice draft dan tidak dapat dikembalikan.
- Invoice import / aset dihapus melalui jalur invoice pembelian all.
PostkondisiInvoice menjadi selesai atau terhapus
TriggerUser klik Finalize Nota / Hapus
Kode FRFR-09

UC-09 : Membuka kembali (unlock) invoice pembelian ke draft​

AktorUser dengan hak #can-draft dan #pembelian draft
DeskripsiUser mengubah invoice selesai kembali menjadi draft agar bisa diedit
PrekondisiInvoice berstatus selesai
Alur utama1. User membuka menu aksi invoice selesai.
2. User memilih Ubah ke Simpan Draft.
3. Sistem membuka kunci invoice.
4. Sistem menampilkan "Berhasil Ubah Pembelian dengan no invoice ... ke Draft".
Alur negatif- Tanpa hak, menu tidak tampil.
- Jika server menolak, muncul notifikasi error.
Bisnis rule- Unlock membutuhkan dua hak sekaligus: #can-draft dan #pembelian draft.
PostkondisiInvoice kembali berstatus draft
TriggerUser klik Ubah ke Simpan Draft
Kode FRFR-10

UC-10 : Memposting ulang invoice pembelian​

AktorUser brand
DeskripsiUser memicu ulang posting data pembelian yang sudah selesai
PrekondisiInvoice berstatus selesai
Alur utama1. User memilih Posting Ulang pada menu aksi.
2. Sistem memposting ulang sesuai tipe invoice.
3. Sistem menampilkan "Berhasil Memposting Ulang Pembelian dengan no invoice ...".
Alur negatif- Jika gagal, muncul notifikasi error dari server.
Bisnis rule- Barang memakai posting ulang pembelian.
- Import memakai sinkronisasi satuan bulk import.
- Aset memakai sinkronisasi integrity pembelian aset.
PostkondisiData turunan pembelian terposting ulang
TriggerUser klik Posting Ulang
Kode FRFR-11

UC-11 : Mengaitkan invoice pembelian ke invoice induk / terkait​

AktorUser brand
DeskripsiUser menghubungkan invoice pembelian dengan invoice induk atau invoice biaya terkait
PrekondisiInvoice pembelian tersedia di daftar
Alur utama1. User memilih Kaitkan ke Parent Invoice (barang) atau Kaitkan ke Invoice Pengiriman / Asuransi / Biaya Lain (import / aset).
2. User memilih invoice pada modal.
3. Sistem menyimpan relasi invoice.
Alur negatif- Jika tidak ada invoice dipilih, tidak ada perubahan.
- Jika gagal, muncul notifikasi error.
Bisnis rule- Untuk barang, invoice ini menjadi anak dari invoice terpilih.
- Untuk import / aset, invoice terpilih menjadi anak dari invoice ini.
PostkondisiRelasi invoice tersimpan
TriggerUser memilih aksi kaitkan invoice
Kode FRFR-12

5. Data Flow Diagram​

DFD-01 — Alur jalur pembelian​

DFD-02 — Status invoice pembelian​

6. Sequence Diagram​

SD-01 — UC-01 : Melihat ringkasan dan daftar pembelian​

SD-02 — UC-02 : Mencari dan memfilter daftar pembelian​

SD-03 — UC-03 : Membuat pembelian biasa​

SD-04 — UC-04 : Membuat pembelian atas PO​

SD-05 — UC-05 : Membuat pembelian atas penerimaan​

SD-06 — UC-06 : Membuat pembelian import​

SD-07 — UC-07 : Mengubah invoice pembelian draft​

SD-08 — UC-08 : Memfinalkan atau menghapus invoice pembelian draft​

SD-09 — UC-09 : Membuka kembali (unlock) invoice pembelian ke draft​

SD-10 — UC-10 : Memposting ulang invoice pembelian​

SD-11 — UC-11 : Mengaitkan invoice pembelian ke invoice induk / terkait​

7. Table Schema​

8. API Schema​

EndpointStatusPerubahan
POST /financial-report/invoice-hutang-reportexisting-
POST /financial-report/invoice-bayar-hutang-reportexisting-
POST /laporan-pembelian/purchase-reportexisting-
GET /invoice-pembelian-allexisting-
GET /invoice-pembelian-all/:idexisting-
GET /invoice-pembelian/:idexisting-
GET /invoice-purchase-orderexisting-
GET /invoice-purchase-order/:idexisting-
GET /invoice-penerimaan-barangexisting-
POST /pembelianexisting-
PUT /pembelian/:idexisting-
POST /pembelian-importexisting-
PUT /pembelian-import/:idexisting-
POST /invoice-pembelian/uploadexisting-
PUT /invoice-pembelian/invoice-only/:idexisting-
DELETE /invoice-pembelian/:idexisting-
DELETE /invoice-pembelian-all/:idexisting-
PUT /invoice-pembelian/unlock/:idexisting-
PUT /invoice-pembelian-all/unlock/:idexisting-
PUT /pembelian/posting-ulang/:idexisting-
POST /integrity/sync-satuan-bulk-importexisting-
POST /integrity-pembelian-aset/syncexisting-
POST /pembelian/connect-to-parent-invoiceexisting-